import {setCookie, getCookie} from "./support";
import config from '@/utils/config.js'
import common from '@/utils/common.js'
import { getDetailedList } from "@/common/api.js";

// 字典表查询公共方法,并判断vuex中是否存在总字典表
export async function getDictList(ns,api) {
  if(ns.$store.state.dictList){
    return ns.$store.state.dictList
  }else{
    let res = await getDetailedList(api);
    if (res.code == 200) {
      return res.data
    }
  }
}

/**
 * 获取token
 */
export function getToken() {
	return getCookie(config.tokenKey)
}

/**
 * 设置token
 * @param token token字符串
 */
export function setToken(token) {
	return setCookie(config.tokenKey, token)
}

/**
 * 清空token
 */
export function clearToken() {
	return setCookie(config.tokenKey, '')
}

/**
 * 获取最后一次访问的url
 */
export function getLastUrl() {
	return getCookie(config.lastUrlKey)
}

/**
 * 设置最后一次访问的url
 * @param lastUrl 最后一次访问的url
 */
export function setLastUrl(lastUrl) {
	return setCookie(config.lastUrlKey, lastUrl)
}

/**
 * 清空最后一次访问的url
 */
export function clearLastUrl() {
	return setCookie(config.lastUrlKey, '')
}

/**
 * 判断是否已登录
 * @return {boolean} 是否已登录
 */
export function isLogin() {
	let token = getToken()
	return token != '' && token != null && token != undefined && localStorage.getItem('companyInfo') != '{}'
	// return token != '' && token != null && token != undefined
}

/**
 * 注销登录
 */
export function logout() {
	clearToken()
	clearLastUrl()
	localStorage.removeItem('companyInfo')
}

/**
 * 重新登录，跳转登录页进行登录并记录当前页面url至最后一次访问url，登陆成功后跳转回当前页面
 * @param ns this页面对象
 */
export function relogin(ns) {
	logout()
	setLastUrl(window.location.href.split('#')[1])
	ns.$router.push({name: 'login'})
}

/**
 * 查看当前页面是否已登录，否的话跳转登录页进行登录并记录当前页面url至最后一次访问url，登陆成功后跳转回当前页面
 * @param ns this页面对象
 */
export function checkLogin(ns) {
	if (isLogin()) {
		return true
	}
	relogin(ns)
	return false
}

/**
 * 格式化标签
 * @param label 标签名
 * @return {string|*} 标签名对象
 */
export function formatLabel(label) {
	if (label == null || label == undefined) {
		return {label: ''}
	}
	for (let i = 0; i < common.labelConfs.length; i++) {
		if (common.labelConfs[i].label == label) {
			return common.labelConfs[i]
		}
	}
	return {label: label, color: '#ff6c6a', bgColor: '#ffeef0'}
}

/**
 * 判断是否为手机号码
 * @param phone 手机号码
 * @return {boolean} 是否为手机号码
 */
export function isPhone(phone) {
	return /^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(phone)
}

/**
 * 判断字符串是否为空
 * @param str 要判断的字符串
 * @return {boolean} 字符串是否为空
 */
export function isEmptyStr(str) {
	return str == null || str == '' || str == undefined || str.replaceAll(' ', '') == ''
}


/**
 * 格式化显示按钮颜色
 */
export function formatSendBtn(policy) {
	if (policy.applyStatus == 2) {
		return {bgColor: '#88C3EE', color: '#FFFFFF', canIn: false}
	}
	if (policy.status == 1) {
		// return {bgColor: '#108EE9', color: '#FFFFFF', canIn: true}
		return {bgColor: '#045DB9', color: '#F1F2F4', canIn: true}
	}
	if (policy.status == 2) {
		return {bgColor: '#6CB7ED', color: '#FFFFFF', canIn: false}
	}
	if (policy.status == 3) {
		return {bgColor: '#ACACAC', color: '#FFFFFF', canIn: false}
	}
	// return {bgColor: '#045db9', color: '#f1f2f4', canIn: true}
	return {bgColor: '#045DB9', color: '#F1F2F4', canIn: true}
	// 045DB9
}

/**
 * 判断字符串 str 是否以 target 结尾
 * @param str 要判断的字符串
 * @param target 结尾字符串数组
 * @return {boolean} 字符串 str 是否以 target 结尾
 */
export function confirmEnding(str, targets) {
	for (let i = 0; i < targets.length; i++) {
		let target = targets[i]
		let start = str.length - target.length;
		let arr = str.substr(start, target.length);
		if (arr == target) {
			return true
		}
	}
	return false
}

/**
 * 判断身份证号是否正确
 * @param cid 要判断的身份证号
 * @return {boolean} 身份证号是否正确
 */
export function isCnNewID(cid) {
	var arrExp = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];//加权因子
	var arrValid = [1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2];//校验码
	if (/^\d{17}\d|x$/i.test(cid)) {
		var sum = 0, idx;
		for (var i = 0; i < cid.length - 1; i++) {
			// 对前17位数字与权值乘积求和
			sum += parseInt(cid.substr(i, 1), 10) * arrExp[i];
		}
		// 计算模（固定算法）
		idx = sum % 11;
		// 检验第18为是否与校验码相等
		return arrValid[idx] == cid.substr(17, 1).toUpperCase();
	} else {
		return false;
	}
}

/**
 * 格式化金额转换元 保留2位小数 1234.56
 * @param {Number} 要转换的金额
 * @return {String} 转换后的金额字符串
 */
export function formatPrice(num) {
	if (isNaN(num) || num == 0) {
		num = '0.00'
	}
	let prec = !isFinite(+2) ? 0 : Math.abs(2) // 保留的位数一定是有限位数的正整数
	let sep = (typeof thousandsSep === 'undefined') ? '' : thousandsSep
	let s = num.toString().replace(/,/g, '') // 字符串，将，变成'';
	let p = parseFloat(s) // 解析一个字符串，并返回一个浮点数
	let n = isNaN(p) ? 1 : p
	let formatNum = n.toFixed(prec).toString().replace(/(\d)(?=(\d{3})+\.)/g, function ($0, $1) {
		return $1 + sep
	})
	return num ? formatNum : ''
}

/**
 * 日期区间相隔多少年如，1.3年
 * @param {date} yyyy-MM-dd
 * @return {Number} n.n年
 */
export function monthDiff(date1, date2) {
  let lMonth = date1.getMonth() + 1
  let lYear = date1.getFullYear()

  let rMonth = date2.getMonth() + 1
  let rYear = date2.getFullYear()
  // 相等只算此年内减去的月份
  if(lYear == rYear){
    return (rMonth - lMonth) / 12
  } else {
    let throughMonth = 12 - lMonth + rMonth
    let throughYear = rYear - (lYear + 1)
    return (throughMonth + throughYear * 12) / 12
  }
}
